/**
 *
 * description:validate param
 * create by mirko
 * 1061773869@qq.com
 *
 */

const getFloatLength = function (val) {
    const val_arr = val.toString().split(".");
    if (val_arr.length === 1) {
        return 0;
    } else {
        return val_arr[1].length;
    }
};

module.exports = {
    isEmpty: function (value) {
        if (typeof value === "undefined") {
            return  true
        }
        if (value === undefined) {
            return true
        }
        if (value === '') {
            return true;
        }
        if (value === null) {
            return true
        }
        if (value && value.length === 0) {
            return true
        }
        return false
    },

    isMobile: function (str) {
        return /^1\d{10}$/.test(str) && typeof (str) !== "undefined";
    },
    //密码6-16位
    isPassword: function (password) {
        return (typeof password !== 'undefined') && /^[\x00-\x7F]{6,16}$/.test(password);
    },
    isInteger: function (str) {
        return /^\d+$/.test(str);
    },
    isCode: function (code) {
        return /^[a-zA-Z0-9]{6}$/.test(code);
    },
    isVerifyCode: function (code) {
        return /^[a-zA-Z0-9]{4}$/.test(code);
    },
    isBoolean: function (str) {
        return /^[0,1]{1}$/.test(str);
    },
    isUndefined: function (obj) {
        return (typeof obj === 'undefined');
    },
    isNumeric: function (n) {
        return !isNaN(parseFloat(n)) && isFinite(n);
    },
    isLatitude: function (value) {
        if (!isNaN(parseFloat(value)) && isFinite(value)) {
            var float_value = parseFloat(value);
            return float_value >= -90 && float_value <= 90 && getFloatLength(float_value) <= 6;
        } else {
            return false;
        }
    },
    isLongitude: function (value) {
        if (!isNaN(parseFloat(value)) && isFinite(value)) {
            var float_value = parseFloat(value);
            return float_value >= -180 && float_value <= 180 && getFloatLength(float_value) <= 6;
        } else {
            return false;
        }
    },
    isObject: function (value) {
        return typeof value === 'object' && (value !== null);
    },
    isFloat: function (n) {
        return Number(n) === n && n % 1 !== 0;
    },
    isArray: function (value) {
        return value instanceof Array;
    },
    // isDate:function (date) {
    //     return /^(\d{4})([/])(\d{2})([/])(\d{2})$/.test(date)
    //
    // },
    // isTime:function (time) {
    //     return /^(0\d{1}|1\d{1}|2[0-3]):[0-5]\d{1}:([0-5]\d{1})$/.test(time)
    // },
    // isDateTime:function (datetime) {
    //     return /^((\d{2}(([02468][048])|([13579][26]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|([1-2][0-9])))))|(\d{2}(([02468][1235679])|([13579][01345789]))[\-\/\s]?((((0?[13578])|(1[02]))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\-\/\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\-\/\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\s((([0-1][0-9])|(2?[0-3]))\:([0-5]?[0-9])((\s)|(\:([0-5]?[0-9])))))?$/.test(datetime)
    //
    // }

    //?
    // _idExist: function (className, objectId) {
    //     const schema = require(`../../model/${className}`)
    //     const model = schema.findOne({_id: objectId})
    //     if (model) {
    //         return true
    //     } else {
    //         return false
    //     }
    //     return false
    // }
};
